home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
program
/
progem.lzh
/
gemcl6.c
< prev
next >
Wrap
Text File
|
1986-07-16
|
5KB
|
147 lines
/* >>>>>>>>>>>>>>>>>>>>>>>>>>> MFDB Structure <<<<<<<<<<<<<<<<<<<<<<<<<< */
/* Memory Form Definition Block */
typedef struct fdbstr
{
long fd_addr; /* Form address */
int fd_w; /* Form width in pixels */
int fd_h; /* Form height in pixels */
int fd_wdwidth; /* Form width in memory words */
int fd_stand; /* Standard form flag */
int fd_nplanes; /* Number of color planes */
int fd_r1; /* Dummy locations: */
int fd_r2; /* Reserved for future use */
int fd_r3;
} MFDB;
/* >>>>>>>>>>>>>>>>>>>> Resource Transform Utilities <<<<<<<<<<<<<<<<<< */
/*------------------------------*/
/* vdi_fix */
/*------------------------------*/
VOID
vdi_fix(pfd, theaddr, wb, h) /* This routine loads the MFDB */
MFDB *pfd; /* Input values are the MFDB's */
LONG theaddr; /* address, the form's address,*/
WORD wb, h; /* the form's width in bytes, */
{ /* and the height in pixels */
pfd->fww = wb >> 1;
pfd->fwp = wb << 3;
pfd->fh = h;
pfd->np = 1; /* Monochrome assumed */
pfd->mp = theaddr;
}
/*------------------------------*/
/* vdi_trans */
/*------------------------------*/
WORD
vdi_trans(saddr, swb, daddr, dwb, h) /* Transform the standard form */
LONG saddr; /* pointed at by saddr and */
UWORD swb; /* store in the form at daddr */
LONG daddr; /* Byte widths and pixel height*/
UWORD dwb; /* are given */
UWORD h;
{
MFDB src, dst; /* These are on-the-fly MFDBs */
vdi_fix(&src, saddr, swb, h); /* Load the source MFDB */
src.ff = TRUE; /* Set it's std form flag */
vdi_fix(&dst, daddr, dwb, h); /* Load the destination MFDB */
dst.ff = FALSE; /* Clear the std flag */
vr_trnfm(vdi_handle, &src, &dst ); /* Call the VDI */
}
/*------------------------------*/
/* trans_bitblk */
/*------------------------------*/
VOID
trans_bitblk(obspec) /* Transform the image belonging */
LONG obspec; /* to the bitblk pointed to by */
{ /* obspec. This routine may also*/
LONG taddr; /* be used with free images */
WORD wb, hl;
if ( (taddr = LLGET(BI_PDATA(obspec))) == -1L)
return; /* Get and validate image address */
wb = LWGET(BI_WB(obspec)); /* Extract image dimensions */
hl = LWGET(BI_HL(obspec));
vdi_trans(taddr, wb, taddr, wb, hl); /* Perform a transform */
} /* in place */
/*------------------------------*/
/* trans_obj */
/*------------------------------*/
VOID
trans_obj(tree, obj) /* Examine the input object. If */
LONG tree; /* it is an icon or image, trans- */
WORD obj; /* form the associated raster */
{ /* forms in place. */
WORD type, wb, hl; /* This routine may be used with */
LONG taddr, obspec; /* map_tree() to transform an */
/* entire resource tree */
type = LLOBT(LWGET(OB_TYPE(obj))); /* Load object type */
if ( (obspec = LLGET(OB_SPEC(obj))) == -1L) /* Load and check */
return (TRUE); /* ob_spec pointer */
switch (type) {
case G_IMAGE:
trans_bitblk(obspec); /* Transform image */
return (TRUE);
case G_ICON: /* Load icon size */
hl = LWGET(IB_HICON(obspec));
wb = (LWGET(IB_WICON(obspec)) + 7) >> 3;
/* Transform data */
if ( (taddr = LLGET(IB_PDATA(obspec))) != -1L)
vdi_trans(taddr, wb, taddr, wb, hl);
/* Transform mask */
if ( (taddr = LLGET(IB_PMASK(obspec))) != -1L)
vdi_trans(taddr, wb, taddr, wb, hl);
return (TRUE);
default:
return (TRUE);
}
}
/* >>>>>>>>>>>>>>>> Macro definitions for the code above <<<<<<<<<<<<<<< */
#define BI_PDATA(x) (x)
#define BI_WB(x) (x + 4)
#define BI_HL(x) (x + 6)
#define OB_TYPE(x) (tree + (x) * sizeof(OBJECT) + 6)
#define OB_SPEC(x) (tree + (x) * sizeof(OBJECT) + 12)
#define IB_PMASK(x) (x)
#define IB_PDATA(x) (x + 4)
#define IB_WICON(x) (x + 22)
#define IB_HICON(x) (x + 24)
/* >>>>>>>>>>>>>>>>>>>>>>>> VDI Copy Mode Table <<<<<<<<<<<<<<<<<<<<<<<<< */
Symbols: N = new destination pixel value (0 or 1)
D = old destination pixel value (0 or 1)
S = source pixel value (0 or 1)
~ = Boolean not (inversion)
& = Boolean and
| = Boolean or
^ = Boolean xor (exclusive-or)
Mode Number Action
---------- ------
0 N = 0 (USE V_BAR INSTEAD)
1 N = S & D
2 N = S & ~D
3 N = S (REPLACE)
4 N = ~S & D (ERASE)
5 N = D (USELESS)
6 N = S ^ D (XOR)
7 N = S | D (TRANSPARENT)
8 N = ~ (S | D)
9 N = ~ (S ^ D)
10 N = ~D (USE V_BAR INSTEAD)
11 N = S | ~D
12 N = ~S
13 N = ~S | D (REVERSE TRANSPARENT)
14 N = ~ (S & D)
15 N = 1 (USE V_BAR INSTEAD)
/* >>>>>>>>>>>>>>>>>>>>>>>> END OF DOWNLOAD <<<<<<<<<<<<<<<<<<<<<<<<<< */